#include <bits/stdc++.h>
using namespace std;
using ll = long long;

int main() {
  // 优化输入输出
  cin.tie(nullptr)->sync_with_stdio(false);
  cin.exceptions(cin.failbit);

  int q; // 操作次数
  cin >> q;

  string s; // 存储括号序列
  int prefix_sum = 0,
      cnt = 0; // prefix_sum: 当前前缀和，cnt: 当前有多少个位置的前缀和小于0
  vector<int> history; // 存储每个位置的前缀和

  while (q--) {
    int op; // 操作类型：1-添加括号，2-删除最后一个括号
    cin >> op;

    if (op == 1) { // 添加括号操作
      char ch;
      cin >> ch;

      // 更新前缀和：'('加1，')'减1
      if (ch == '(')
        prefix_sum++;
      else
        prefix_sum--;

      s.push_back(ch); // 将括号添加到序列末尾

      history.push_back(prefix_sum); // 记录当前位置的前缀和

      // 如果当前前缀和小于0，说明出现了不匹配的右括号
      if (prefix_sum < 0)
        cnt++; // 增加计数

    } else { // 删除最后一个括号操作
      // 恢复前缀和：删除'('则减1，删除')'则加1
      if (s.back() == '(')
        prefix_sum--;
      else
        prefix_sum++;

      s.pop_back(); // 删除最后一个括号

      // 如果被删除的位置前缀和小于0，减少计数
      if (history.back() < 0)
        cnt--;

      history.pop_back(); // 删除对应的前缀和记录
    }

    // 判断当前括号序列是否有效：
    // 1. cnt == 0: 所有位置的前缀和都 >= 0（没有出现右括号多于左括号的情况）
    // 2. prefix_sum == 0: 最终前缀和为0（左右括号数量相等）
    // 同时满足这两个条件才是有效的括号序列
    cout << (cnt || prefix_sum ? "No" : "Yes") << '\n';
  }
}